home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / lftp / verify-file < prev   
Text File  |  2009-10-13  |  3KB  |  121 lines

  1. #!/usr/bin/perl -w
  2. #
  3. # This is a file verification tool for lftp.
  4. #
  5. # Copyright (c) 2005 by Alexander V. Lukyanov (lav@yars.free.net)
  6. #
  7. # This program is free software; you can redistribute it and/or modify
  8. # it under the terms of the GNU General Public License as published by
  9. # the Free Software Foundation; either version 2 of the License, or
  10. # (at your option) any later version.
  11. #
  12. # This program is distributed in the hope that it will be useful,
  13. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. # GNU General Public License for more details.
  16. #
  17. # You should have received a copy of the GNU General Public License
  18. # along with this program; if not, write to the Free Software
  19. # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20.  
  21. # $Id: verify-file,v 1.2 2005/06/21 14:30:04 lav Exp $
  22.  
  23. use Digest::MD5;
  24. use String::CRC32;
  25.  
  26. $err=0;
  27. file: foreach $file (@ARGV) {
  28.    $verified=0;
  29.    if(-d $file) {
  30.       print STDERR "$file: Is a directory\n";
  31.       $err++;
  32.       next;
  33.    }
  34.    unless(-r $file) {
  35.       print STDERR "$file: $!\n";
  36.       $err++;
  37.       next;
  38.    }
  39.    if($file=~m'/') {
  40.       ($dir,$name)=($file=~m{(.*)/(.+)});
  41.       $dir='/' if $dir eq '';
  42.    } else {
  43.       $name=$file;
  44.       $dir='.';
  45.    }
  46.    @md5files=(glob("$dir/*md5{,sum}"),glob("$dir/*MD5{,SUM}"));
  47.    open MD5,'-|',qw{fgrep -w --},$name,'/dev/null',@md5files;
  48.    while(<MD5>) {
  49.       chomp;
  50.       ($md5,$name1)=split;
  51.       ($md5_file,$md5)=($md5=~m{(.*):(.*)});
  52.       $md5_file=~s{^\./}{};
  53.       next if $name1 ne $name;
  54.       $ctx=Digest::MD5->new;
  55.       open FILE,'<',$file;
  56.       $ctx->addfile(*FILE);
  57.       close FILE;
  58.       if(lc($md5) ne $ctx->hexdigest) {
  59.      print STDERR "$file: MD5 digest mismatch (md5 file: $md5_file)\n";
  60.      $err++;
  61.      $verified++;
  62.       } else {
  63.      print "$file: MD5 OK (md5 file: $md5_file)\n";
  64.      $verified++;
  65.       }
  66.    }
  67.    close MD5;
  68.  
  69.    next file if $verified;
  70.  
  71.    @sfvfiles=(glob("$dir/*.sfv"),glob("$dir/*.SFV"));
  72.    open SFV,'-|',qw{fgrep -w --},$name,'/dev/null',@sfvfiles;
  73.    while(<SFV>) {
  74.       chomp;
  75.       ($name1,$crc32)=split;
  76.       ($sfv_file,$name1)=($name1=~m{(.*):(.*)});
  77.       $sfv_file=~s{^\./}{};
  78.       next if $name1 ne $name;
  79.       open FILE,'<',$file;
  80.       $crc321=crc32(*FILE);
  81.       close FILE;
  82.       if($crc321!=hex($crc32)) {
  83.      print STDERR "$file: CRC32 mismatch (sfv file: $sfv_file)\n";
  84.      $err++;
  85.      $verified++;
  86.       } else {
  87.      print "$file: CRC32 OK (sfv file: $sfv_file)\n";
  88.      $verified++;
  89.       }
  90.    }
  91.    close SFV;
  92.  
  93.    next file if $verified;
  94.  
  95.    if($name=~/\.gz$/) {
  96.       system qw{gzip -tv},$file;
  97.       $e=($?>>8);
  98.       $err++ if $e;
  99.       next file;
  100.    }
  101.    if($name=~/\.bz2$/) {
  102.       system qw{bzip2 -tv},$file;
  103.       $e=($?>>8);
  104.       $err++ if $e;
  105.       next file;
  106.    }
  107.    if($name=~/\.zip$/) {
  108.       system qw{unzip -tqq},$file;
  109.       $e=($?>>8);
  110.       $err++ if $e;
  111.       next file;
  112.    }
  113.    if($name=~/\.rpm$/) {
  114.       system qw{rpm --checksig},$file;
  115.       $e=($?>>8);
  116.       $err++ if $e;
  117.       next file;
  118.    }
  119. }
  120. exit $err?1:0;
  121.